package com.qls.ali.biz.order.util;


/**
 * 常量
 *
 * @author doyoung
 */
public class OrderConstant {

    /**
     * 阿里飞猪订单路由
     */
    public enum AliOrderRouter {
        /**
         * 验证价格
         */
        ValidateRQ("ValidateRQ"),
        /**
         * 支付成功通知
         */
        PaySuccessRQ("PaySuccessRQ"),
        /**
         * 预定
         */
        BookRQ("BookRQ"),
        /**
         * 查询订单
         */
        QueryStatusRQ("QueryStatusRQ"),

        /**
         * 申请退款通知
         */
        OrderRefundRQ("OrderRefundRQ"),

        /**
         * 取消订单通知
         */
        CancelRQ("CancelRQ");

        private String value;

        AliOrderRouter(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 渠道：
     * 1:携程
     * 2：美团
     * 3：人工
     * 4:其他
     * 5:美团商旅
     * 6：亚朵
     */
    public enum Channel {
        /**
         * 携程
         */
        Ctrip(1),
        /**
         * 美团
         */
        Mt(2),
        /**
         * 人工
         */
        Manual(3),
        /**
         * 其他
         */
        Other(4),
        /**
         * 美团商旅
         */
        MtB(5),

        /**
         * 亚朵
         */
        Yd(6);

        private Integer value;

        Channel(Integer value) {
            this.value = value;
        }

        /**
         * 通过value取枚举
         *
         * @param value
         * @return
         */
        public static Channel getChannelByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (Channel enums : Channel.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }

        public Integer getValue() {
            return value;
        }
    }

    /**
     * 订单发货,操作的类型：1.确认无房（取消预订，710发送短信提醒买家申请退款）2.确认预订 3.入住 4.离店 5.noshow 6.关单
     */
    public enum OptType {
        /**
         * 确认无房
         */
        NoRoom(1),
        /**
         * 确认预订
         */
        Confirm(2),
        /**
         * 关单
         */
        Close(6);

        private Integer value;

        OptType(Integer value) {
            this.value = value;
        }

        /**
         * 通过value取枚举
         *
         * @param value
         * @return
         */
        public static OptType getOptTypeByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (OptType enums : OptType.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }

        public Integer getValue() {
            return value;
        }
    }

    /**
     * 本地订单状态
     * 1 未支付， 2已支付，3已发货 4 申请退款 5 已退款
     */
    public enum AliLocalOrderStatus {
        /**
         * 未支付
         */
        Unpaid(1),
        /**
         * 已支付
         */
        Paid(2),
        /**
         * 已发货
         */
        Delivered(3),
        /**
         * 申请退款
         */
        ApplyRefund(-1),
        /**
         * 已退款
         */
        Refund(-2),
        /**
         * 申请取消订单
         */
        Calcel(-5),
        /**
         * 已入住
         */
        CheckIn(4),
        /**
         * 关单
         */
        Close(-3);

        private Integer value;

        AliLocalOrderStatus(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }

    /**
     * 采购状态
     * 0 未采购，1 已受理 （ 已提交） 3 已采购 -1 采购失败 -2 已退单
     */
    public enum MtLocalOrdBuyStatus {
        /**
         * 未采购
         */
        Unpurchased(0),
        /**
         * 已受理
         */
        Accepted(1),
        /**
         * 采购中
         */
        Purchasing(2),
        /**
         * 已采购
         */
        Purchased(3),
        /**
         * 采购失败
         */
        Purchfailure(-1),
        /**
         * 退款中
         */
        Chargebacking(-2),
        /**
         * 已退款
         */
        Chargebacked(-3),
        /**
         * 退款失败
         */
        ChargebackFail(-4),
        /**
         * 订单取消中
         */
        Canceling(-5),
        /**
         * 已取消
         */
        Canceled(-6),
        /**
         * 取消失败
         */
        CancelFail(-7),
        /**
         * 已入住
         */
        CheckIn(-8);

        private Integer value;

        MtLocalOrdBuyStatus(Integer value) {
            this.value = value;
        }

        public static MtLocalOrdBuyStatus getLocalOrdBuyStatusByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (MtLocalOrdBuyStatus enums : MtLocalOrdBuyStatus.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }

        public Integer getValue() {
            return value;
        }
    }

    public enum OrdType {
        /**
         * 人工
         */
        Manu(0),
        /**
         * 自动
         */
        Auto(1);

        private Integer value;

        OrdType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }


    /**
     * 订单查询返回的状态
     */
    public enum AliQueryStatus {
        /**
         * 订单已确认
         */
        Confirm(1),
        /**
         * 订单未确认
         */
        UnConfirm(2),
        /**
         * 订单等待处理中
         */
        Dealing(3),
        /**
         * 订单已取消
         */
        Canceled(4),
        /**
         * 已入住
         */
        CheckIn(5),
        /**
         * 订单关闭
         */
        Closed(6),
        /**
         * 订单删除
         */
        Deleted(7),
        /**
         * 未入住
         */
        NoShow(8),
        /**
         * 客人离店
         */
        CheckOut(9);

        private Integer value;

        AliQueryStatus(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }


    public enum AliOrderUpdateStatus {
        /**
         * 订单已经确认(下单成功)
         */
        Confirm(2),
        /**
         * 订单未确认(下单失败、满房等)
         */
        NonConfirm(1),
        /**
         * 已入住
         */
        CheckIn(3);

        private Integer value;

        AliOrderUpdateStatus(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }
}
